/**************************** (C) COPYRIGHT 2017 Fortiortech shenzhen *****************************
* File Name          : TimerInit.c
* Author             : Vina Peng,Fortiortech  Appliction Team
* Version            : V1.0
* Date               : 10-Apr-2017
* Description        : This file contains Timer Initial function used for Motor Control.
***************************************************************************************************
* All Rights Reserved
**************************************************************************************************/


/* Includes -------------------------------------------------------------------------------------*/
#include <FU68xx_2.h>
#include <Myproject.h>

/* Private variables ----------------------------------------------------------------------------*/
//PWMINCtl_TypeDef xdata PWMINCtl;


/*-------------------------------------------------------------------------------------------------
	Function Name :	void TIM0_Init(void)
	Description   :	TIM0初始化配置
	Input         :	无
  Output				:	无
-------------------------------------------------------------------------------------------------*/
void TIM0_Init(void)
{


}

/*-------------------------------------------------------------------------------------------------
	Function Name :	void TIM1_Init(void)
	Description   :	TIM1初始化配置
	Input         :	无
  Output				:	无
-------------------------------------------------------------------------------------------------*/
void TIM1_Init(void)
{


}

/*-------------------------------------------------------------------------------------------------
	Function Name :	void TIM2_Init(void)
	Description   :	TIM2初始化配置
	Input         :	无
  Output				:	无
-------------------------------------------------------------------------------------------------*/
void TIM2_Init(void)
{

}

/*-------------------------------------------------------------------------------------------------
	Function Name :	void TIM3_Init(void)
	Description   :	TIM3初始化配置
	Input         :	无
  Output				:	无
-------------------------------------------------------------------------------------------------*/
void TIM3_Init(void)
{
/*-------------------------------------------------------------------------------------------------
  先停止计数，配置完寄存器后，最后启动计数
-------------------------------------------------------------------------------------------------*/
	ClrBit(TIM3_CR1, T3EN);			  // 0-停止计数；1-使能计数
//	SetBit(PH_SEL, T3SEL);				//0-不连接到端口GP11；1-连接到端口GP11
	ClrBit(PH_SEL, T3SEL);
/*-------------------------------------------------------------------------------------------------
	时钟分频设置(T2PSC)
  000:cpuclk(24MHz)			001:cpuclk/2^1(12MHz)	010:cpuclk/2^2(6MHz)	011:cpuclk/2^3(3MHz)
  100:cpuclk/2^4(1.5MHz)	101:cpuclk/2^5(750KHz)	110:cpuclk/2^6(375KHz)	111:cpuclk/2^7(187.5KHz)
-------------------------------------------------------------------------------------------------*/
	SetReg(TIM3_CR0, T3PSC0 | T3PSC1 | T3PSC2, 0 );

/*-------------------------------------------------------------------------------------------------
	/模式选择
	0-输入模式
  1-输出模式
-------------------------------------------------------------------------------------------------*/
  ClrBit(TIM3_CR0, T3MOD);	
	
  ClrBit(TIM3_CR0, T3OCM);	
  
/*-------------------------------------------------------------------------------------------------
	/滤波时间
	00-不滤波；01-8个时钟周期
  10-16个时钟周期；11-32个时钟周期
-------------------------------------------------------------------------------------------------*/
	SetReg(TIM3_CR1, T3FE1|T3FE0,T3FE0);				                       
/*-------------------------------------------------------------------------------------------------
  清除中断标志位
	禁止PWM周期检测中断使能
	使能计数器上溢中断使能
-------------------------------------------------------------------------------------------------*/
	ClrBit(TIM3_CR1, T3IR | T3IF | T3IP);		                   // 清除中断标志位
	SetBit(TIM3_CR1, T3IPE | T3IFE);				                   // 输入有效边沿变化中断使能和基本计数器上溢使能
/*-------------------------------------------------------------------------------------------------
	定时器2中断优先级配置及芯片中断总使能
	PTIM31-PTIM30，中断优先级控制值从0-3依次表示优先级从最低到最高，共4级优化级控制
	EA,芯片中断总使能
-------------------------------------------------------------------------------------------------*/
	PTIM31 = 0;
	PTIM30 = 1;										                         // TIM2/3中断优先级别为2
	EA = 1;

/*-------------------------------------------------------------------------------------------------
  配置周期值、比较值、计数值
-------------------------------------------------------------------------------------------------*/
	TIM3__CNTR = 0;
  TIM3__DR = 0;	
  TIM3__ARR = 24000;
  
/*-----------启动计数------------------------------------------------*/
	SetBit(TIM3_CR1, T3EN);				    //使能计数器，启动计数
  
}

/*-------------------------------------------------------------------------------------------------
	Function Name :	void TIM4_Init(void)
	Description   :	TIM4初始化配置，用于处理常规事务，如环路响应，故障保护等
	Input         :	无
  Output				:	无
-------------------------------------------------------------------------------------------------*/
void TIM4_Init(void)
{
	  /*-------------------------------------------------------------------------------------------------
    先停止计数，配置完寄存器后，最后启动计数
    -------------------------------------------------------------------------------------------------*/   
    ClrBit(TIM4_CR1, T4EN);        // 0 - 停止计数；1 - 使能计数
    SetBit(PH_SEL, T4SEL);         // 1 - P0.1作为Time4的输入输出
//    ClrBit(PH_SEL, T4SEL)        // 0 - P0.1作为GPIO 
    
    /*-------------------------------------------------------------------------------------------------
    时钟分频设置(T4PSC)
    000:cpuclk(24MHz)      001:cpuclk/2^1(12MHz)  010:cpuclk/2^2(6MHz)  011:cpuclk/2^3(3MHz)
    100:cpuclk/2^4(1.5MHz)  101:cpuclk/2^5(750KHz)  110:cpuclk/2^6(375KHz)  111:cpuclk/2^7(187.5KHz)
    -------------------------------------------------------------------------------------------------*/
    SetReg(TIM4_CR0, T4PSC0 | T4PSC1 | T4PSC2, T4PSC0 | T4PSC2 );

    /*-------------------------------------------------------------------------------------------------
    TIM4_CR0：   输入输出模式选择
    T4MOD = 0 输入Timer模式
    T4MOD = 1 输出模式 
    -------------------------------------------------------------------------------------------------*/   
//    SetBit(TIM4_CR0,T4MOD);  
    ClrBit(TIM4_CR0, T4MOD); 

    /*-------------------------------------------------------------------------------------------------   
    输出模式        ：比较模式选择
    T4OCM = 0      TIM4__CNTR <= TIM4__DR 输出 “0”  TIM4__CNTR > TIM4__DR 输出 “1”  
    T4OCM = 1      TIM4__CNTR <= TIM4__DR 输出 “1”  TIM4__CNTR > TIM4__DR 输出 “0”

    输入Timer模式   ：周期沿选择
    T4OCM = 0      相邻两个上升沿为1个周期，上升沿到下降沿为高电平脉宽 
    T4OCM = 1      相邻两个下降沿为1个周期，下降沿到上升沿为低电平脉宽 
    -------------------------------------------------------------------------------------------------*/
//    SetBit(TIM4_CR0,T4OCM);//输出比较器匹配模式,TIM3_CNTR≤TIM3_DR: 0;
    ClrBit(TIM4_CR0, T4OCM);  
  	
    /*-------------------------------------------------------------------------------------------------
    滤波时间
    00 - 不滤波；       01 - 8个时钟周期
    10 - 16个时钟周期； 11 - 32个时钟周期
    -------------------------------------------------------------------------------------------------*/
    SetReg(TIM4_CR1, T4FE1|T4FE0,T4FE0);                               
    
    /*-------------------------------------------------------------------------------------------------
    清除中断标志位
    禁止PWM周期检测中断使能
    使能计数器上溢中断使能
    -------------------------------------------------------------------------------------------------*/
    ClrBit(TIM4_CR1, T4IR | T4IP | T4IF);                       // 清除中断标志位
    SetBit(TIM4_CR1, T4IFE | T4IPE);                            // 输入有效边沿变化中断使能和基本计数器上溢使能
    ClrBit(TIM4_CR0, T4IRE);                                    // 輸出模式：比較匹配中斷使能  輸入模式：脈寬檢測中斷使能

    
    /*-------------------------------------------------------------------------------------------------
    单次模式配置
    输出模式：计数器上溢事件
    输入模式：PWM周期检测或计数器上溢事件
    T4OPM = 0       发生上述事件时，计数器不停止
    T4OPM = 1       发生上述事件时，计数器停止(清除T4EN)
    -------------------------------------------------------------------------------------------------*/
    ClrBit(TIM4_CR0, T4OPM);
    
    /*-------------------------------------------------------------------------------------------------
    定时器4中断优先级配置及芯片中断总使能
    PTIM4S1-PTIM4S0，中断优先级控制值从0-3依次表示优先级从最低到最高，共4级优化级控制
    EA,芯片中断总使能
    -------------------------------------------------------------------------------------------------*/
    PTIM4S1 = 0;
    PTIM4S0 = 1;                                                // TIM4中断优先级别为2
    EA = 1;

    /*-------------------------------------------------------------------------------------------------
    配置周期值、比较值、计数值
    -------------------------------------------------------------------------------------------------*/
    TIM4__DR   = 24000;   //输入模式，DR和ARR的值由硬件写；
    TIM4__ARR  = 24000.;
    TIM4__CNTR = 0;
	 	
    /*-----------启动计数------------------------------------------------*/
    SetBit(TIM4_CR1, T4EN);            //使能计数器，启动计数

}

/*-------------------------------------------------------------------------------------------------
	Function Name :	void TIM1ms_Init(void)
	Description   :	TIM1MS初始化配置
	Input         :	无
  Output				:	无
-------------------------------------------------------------------------------------------------*/

void TIM1ms_Init(void)
{
	//SYST_ARR = 24000;     //计算公式：24M/SYST_ARR；例 24M/24000=1000Hz
	PTIM4S1 = 0;
	PTIM4S0 = 1;										                   // TIM4/5中断优先级别为1
	EA = 1;
	SetBit(DRV_SR, SYSTIE, 1);		                     // 使能1ms定时中断

}
